package org.dromara.system.domain.vo;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.system.domain.AppOrder;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.system.domain.AppProcurementDetail;
import org.dromara.system.domain.AppQualityInfo;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;


/**
 * 订单视图对象 app_order
 *
 * @author Lion Li
 * @date 2025-09-12
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = AppOrder.class)
public class AppOrderVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @ExcelProperty(value = "主键ID")
    private Long id;

    /**
     * 订单ID
     */
    @ExcelProperty(value = "订单ID")
    private String orderId;

    /**
     *  0用户  1采购员 2供应商 3司机 4仓库管理员 5质检员 6物流专员 7财务
     */
    private Long roleId;

    /**
     * 公司名称
     */
    private String companyName;

    /**
     * 供应商名称
     */
    private String supplierName;

    /**
     * 订单状态 0待下发 1已下发 2待确认 3待接单 4待发货 5运输中 6已送达 7已完成 8费用待确认 9已确认费用 10待支付 11已支付
     */
    @ExcelProperty(value = "订单状态 0待下发 1已下发 2待确认 3待接单 4待发货 5运输中 6已送达 7已完成 8费用待确认 9已确认费用 10待支付 11已支付")
    private Long orderStatus;

    /**
     * 采购计划ID
     */
    @ExcelProperty(value = "采购计划ID")
    private Long planId;

    /**
     * 供应商代号
     */
    @ExcelProperty(value = "供应商代号")
    private String supplierCode;

    /**
     * 发货地址
     */
    @ExcelProperty(value = "发货地址")
    private String deliveryAddress;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注")
    private String remark;

    /**
     * 仓库所在地
     */
    @ExcelProperty(value = "仓库所在地")
    private String warehouseLocation;

    /**
     * 收货地址
     */
    @ExcelProperty(value = "收货地址")
    private String receiveAddress;

    /**
     * 司机选择方式 0抢单 1指定
     */
    @ExcelProperty(value = "司机选择方式 0抢单 1指定")
    private Long driverSelectType;

    /**
     * 是否压车 0否 1是
     */
    @ExcelProperty(value = "是否压车 0否 1是")
    private Long isPressCar;

    /**
     * 押车费用
     */
    @ExcelProperty(value = "押车费用")
    private Long pressCarFee;

    /**
     * 运输公司名称
     */
    @ExcelProperty(value = "运输公司名称")
    private String transportCompany;

    /**
     * 纳税人识别号
     */
    @ExcelProperty(value = "纳税人识别号")
    private String taxpayerId;

    /**
     * 联系人
     */
    @ExcelProperty(value = "联系人")
    private String contactName;

    /**
     * 联系人方式
     */
    @ExcelProperty(value = "联系人方式")
    private String contactPhone;

    /**
     * 司机姓名
     */
    @ExcelProperty(value = "司机姓名")
    private String driverName;

    /**
     * 身份证号
     */
    @ExcelProperty(value = "身份证号")
    private String driverIdCard;

    /**
     * 司机手机号
     */
    @ExcelProperty(value = "司机手机号")
    private String driverPhone;

    /**
     * 车牌号
     */
    @ExcelProperty(value = "车牌号")
    private String carPlate;

    /**
     * 车辆类型
     */
    @ExcelProperty(value = "车辆类型")
    private String carType;

    /**
     * 车长(米)
     */
    @ExcelProperty(value = "车长(米)")
    private Long carLength;

    /**
     * 载重量(吨)
     */
    @ExcelProperty(value = "载重量(吨)")
    private Long loadCapacity;

    /**
     * 拍照车发货信息
     */
    @ExcelProperty(value = "拍照车发货信息")
    private String photoLoadInfo;

    /**
     * 拍照车卸货信息
     */
    @ExcelProperty(value = "拍照车卸货信息")
    private String photoUnloadInfo;

    /**
     * 总重量
     */
    @ExcelProperty(value = "总重量")
    private Long totalWeight;

    /**
     * 去皮重量(装车榜重)
     */
    @ExcelProperty(value = "去皮重量(装车榜重)")
    private Long tareWeightLoad;

    /**
     * 材料装车总重(总重量-去皮重量)
     */
    @ExcelProperty(value = "材料装车总重(总重量-去皮重量)")
    private Long materialLoadWeight;

    /**
     * 过磅总重量(仓库称重)
     */
    @ExcelProperty(value = "过磅总重量(仓库称重)")
    private Long weighingTotalWeight;

    /**
     * 去皮重量(卸车后)
     */
    @ExcelProperty(value = "去皮重量(卸车后)")
    private Long tareWeightUnload;

    /**
     * 材料卸货总重量(过磅总重量-去皮重量)
     */
    @ExcelProperty(value = "材料卸货总重量(过磅总重量-去皮重量)")
    private Long materialUnloadWeight;

    /**
     * 路损
     */
    @ExcelProperty(value = "路损")
    private Long roadLoss;

    /**
     * 扣除吨数
     */
    @ExcelProperty(value = "扣除吨数")
    private Long deductWeight;

    /**
     * 采购净重量
     */
    @ExcelProperty(value = "采购净重量")
    private Long netWeight;

    /**
     * 包数
     */
    @ExcelProperty(value = "包数")
    private Long packageNum;

    /**
     * 仓库标识
     */
    @ExcelProperty(value = "仓库标识")
    private String warehouseCode;

    /**
     * 入库车辆车牌号
     */
    @ExcelProperty(value = "入库车辆车牌号")
    private String warehouseCarPlate;

    /**
     * 仓库管理员
     */
    @ExcelProperty(value = "仓库管理员")
    private String warehouseAdmin;

    /**
     * 入库日期
     */
    @ExcelProperty(value = "入库日期")
    private Date warehouseDate;

    /**
     * 质检信息ID
     */
    @ExcelProperty(value = "质检信息ID")
    private Long qualityId;

    /**
     * 运费
     */
    @ExcelProperty(value = "运费")
    private Long freight;

    /**
     * 押车费
     */
    @ExcelProperty(value = "押车费")
    private Long pressFee;

    /**
     * 货品单价
     */
    @ExcelProperty(value = "货品单价")
    private Long unitPrice;

    /**
     * 贷款金额
     */
    @ExcelProperty(value = "贷款金额")
    private Long loanAmount;


    /**
     * 司机id
     */
    private Long driverId;

    /**
     * 采购详情
     */
    @TableField(exist = false)
    private List<AppProcurementDetail> detailList;

    /**
     * 创建时间
     */
    @ExcelProperty(value = "创建时间")
    private Date createTime;

    /**
     * 发货时间
     */
    private Date sendTime;

    /**
     * 长
     */
    private Double length;

    /**
     * 宽
     */
    private Double width;

    /**
     * 高
     */
    private Double height;


    /**
     * 送达时间
     */
    private Date deliveryTime;

    /**
     * 租户ID
     */
    private String tenantId;

    /**
     * 入库状态 0未入库 1已入库
     */
    private Integer warehouseFlag;

    /**
     * 出库状态 0待出库 1已出库
     */
    private Integer warehouseOutFlag;

    /**
     * 质检信息
     */
    private AppQualityInfo qualityInfo;
}
